// 给你两个数组，arr1 和 arr2，
// arr2 中的元素各不相同
// arr2 中的每个元素都出现在 arr1 中
// 对 arr1 中的元素进行排序，使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。
// 未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

// 提示：
// arr1.length, arr2.length <= 1000
// 0 <= arr1[i], arr2[i] <= 1000
// arr2 中的元素 arr2[i] 各不相同
// arr2 中的每个元素 arr2[i] 都出现在 arr1 中

// 暴露接口
const relativeSortArray = function (arr1: number[], arr2: number[]) {
    // 自定义比较函数
    const compare = (a: number, b: number) => {
        const indexA: number = arr2.indexOf(a);// 求出a在数组2中的索引
        const indexB: number = arr2.indexOf(b);// 求出b在数组2中的索引
        // a，b都不存在于与数组2时，直接用原始值判断大小
        if (indexA === -1 && indexB === -1) {
            return a - b;
            // 当a不存在于数组2时，a的位置一定在b的后面
        } else if (indexA === -1) {
            return 1;
            // 当b不存在与数组2时，b的位置一定在a的后面
        } else if (indexB === -1) {
            return -1;
            // 当a，b都在数组2时，看他们俩谁的索引靠前就排前
        } else {
            return indexA - indexB;
        }
    };
    return arr1.sort(compare);
};


relativeSortArray([2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19], [2, 1, 4, 3, 9, 6])

// 这道题目对于JavaScript来说是一道比较怪异的题目
// 完全手写而言过于复杂，且不具备生产实践的可能性
// 所以比较合乎常理的解法则是使用自定义的比较函数，并调用sort方法
// 而至于自定义的比较函数书写基本上难度也不大，基本上只是要搞定sort方法的原理即可
// 然后将题目的要求翻译成比较函数的分支即可
